1. Technical Field
This invention relates to the handling of communications between `client` and `server` computer processes. In particular, this invention reduces data movement operations at the server process, thereby minimizing the overhead associated with communications between the two processes.
2. Description of the Prior Art
Many applications exist in which two processes must pass messages back and forth over some type of communication transport. Such applications are called `cooperative applications` and the processing done by them is called `cooperative processing.` Often, the two processes involved are performed on different computers. Moving data between computers and between processes can cause a large amount of computing overhead. Also, depending on the application or operating environment, once the data is received by the `server` process, more overhead can be incurred by moving the data to different locations in the server's local storage. Since all of this overhead greatly reduces the performance of such an application, an important objective of cooperative processing is to minimize the movement of data between the processes and within each process.
In order to reduce the overhead associated with inter-process communications, some communication facilities bundle multiple small messages into a single, larger buffer. While this can reduce the amount of work for the communication facility, arbitrarily combining variable length messages into a single buffer can actually cause problems for the server in terms of managing its storage space. Many operating environments use a scheme where storage is allocated to applications only in even multiples of some predetermined number of units. For instance, in a storage manager which allocates storage in multiples of 8 units, an application's request for five units of storage would actually return 8 units to the application. In such an environment, when a set of bundled variable length messages is placed in storage, the beginning and ending boundaries of the messages will probably not coincide with the minimum storage unit size of the storage manager. If the entire set of messages is received into a contiguous buffer of storage, every message buffer must be processed before the block can be returned to the operating environment since attempting to free each message as it is processed would cause the corruption of portions of messages that fall between the end of one message and the next storage unit boundary of the buffer. Processing all buffers in the block before returning the block to the operating environment can constrain the system's storage if the number or size of the messages is large.
To avoid constraining storage, each small message would have to be received individually (assuming this capability exists) into a buffer tailored to the size of the message. In this case excessive overhead is incurred not only by the invocation of multiple receive operations to put each message into the local buffer, but also by the extra storage manager calls to allocate multiple buffers.
None of the above prior art message bundling schemes provide satisfactory performance in cooperative processing. There is a need for a way to capitalize on oportunities for message bundling while providing satisfactory storage-related performance.